Skip to content

feat(platform): sandbox tx boundary · gantt tree schema · formula date math · RLS §7.3.1#2039

Merged
os-zhuang merged 2 commits into
mainfrom
claude/tender-torvalds-7b232d
Jun 18, 2026
Merged

feat(platform): sandbox tx boundary · gantt tree schema · formula date math · RLS §7.3.1#2039
os-zhuang merged 2 commits into
mainfrom
claude/tender-torvalds-7b232d

Conversation

@baozhoutao

Copy link
Copy Markdown
Contributor

背景

用真实 eHR/MES 生产项目作磨刀石,补齐 ObjectStack 平台四处能力缺口。每项都以"扩 schema / 接契约"为主,向后兼容(新增字段全 optional)。

改动

ctx.api.transaction(P0) — @objectstack/{spec,objectql,runtime}

沙箱 hook/action body 内的事务边界:ctx.api.transaction(async () => { … }),回调内所有 ctx.api 读写跑在同一个 driver 事务里,返回即 commit、抛错即 rollback、超时残留事务在 dispose 前兜底 rollback。

  • spec: 新增 api.transaction capability token。
  • objectql: ScopedContext 增加 beginTransaction()/commitTransaction(handle)/rollbackTransaction(handle) 原语,handle 显式穿线(resolveTx 优先于 ambient txStore),因为沙箱跨多个事件循环 turn 驱动 body、AsyncLocalStorage 上下文活不过 setImmediate 边界。无事务支持的 driver 退化为非事务执行。
  • runtime: QuickJS runner 用三个 deferred-promise host leaf(begin/commit/rollback)接出 ctx.api.transaction,事务内操作走 tx 作用域上下文。

② Gantt 扩 schema(P0) — @objectstack/spec

GanttConfigSchema 补上渲染器早已支持、却被 spec 边界 z.object 静默剥掉的 11 个字段:parentField(项目→产品→排产计划→派工单 4 级树)、typeFieldbaselineStart/EndFieldresourceView+assignee/effort/capacityquickFilterstooltipFields 等。原 5 字段不变,全部新增 optional。

③ formula 日期运算 — @objectstack/formula

CEL stdlib 新增 addDays(date, n) / addMonths(date, n)(UTC;ndyn 规避 record number 字段以 double 到达时的 no such overload #1928;addMonths 钳到目标月末:Jan 31 +1mo → Feb 28)。

④ RLS 收敛文档 + 接 §7.3.1(P1) — @objectstack/{spec,plugin-security}

  • 收敛文档:rls.zod.ts 从"承诺通用 SQL"收敛到编译器真正实现的 4 种形式(field = current_user.<prop> / field = 'literal' / field IN (current_user.<array>) / 1 = 1),删除过度承诺的 subquery / AND·OR·NOT / LIKE·ILIKE / regex / ANY·ALL / NOT IN / IS NULL / NOW() 表面,显式写明 fail-closed。
  • 接 §7.3.1 动态成员:把硬编码的 org_user_ids 泛化为 ExecutionContext.rlsMembership: Record<string, string[]> 预解析成员袋(团队/辖区/共享记录);编译器把各键并入 user context(仅数组、不覆盖具名字段),于是任意 field IN (current_user.<key>) 都能解析、空集仍 fail-closed。顺手把 1 = 1 识别为 always-true,让 RLS.allowAllPolicy 名实相符(此前反向 deny-all 暗雷)。

验证

  • @objectstack/spec 6566 ✅
  • @objectstack/plugin-security 77 ✅(含 5 个新 RLS 测试)
  • @objectstack/runtime 395 ✅ · @objectstack/objectql 667 ✅(① 上轮验证)
  • @objectstack/formula 129 ✅
  • 相关包均构建通过。

changesets

sandbox-ctx-api-transaction(spec/objectql/runtime minor)· gantt-config-tree-resource-fields(spec minor)· formula-add-days-months(formula minor)· rls-converge-docs-dynamic-membership(spec/plugin-security minor)

后续(不在本 PR)

  • objectui 侧 GanttConfigEx 收敛进 spec GanttConfig,待 @objectstack/spec 发版后跟进(已挂 task)。
  • ⑤ 序列自增号、⑥ 移动端响应式 — P2 延后。

…math, RLS §7.3.1

Four platform enhancements surfaced by a real eHR/MES dogfood:

- runtime/objectql/spec: ctx.api.transaction() — transaction boundary for
  sandboxed hook/action bodies (explicit handle threading across the
  deferred-promise pump; rollback on throw or timeout). New api.transaction
  capability.
- spec: extend GanttConfigSchema with the 11 fields the renderer already
  supports (parentField tree, baselines, resourceView, quickFilters, …) so
  the metadata pipeline stops stripping them at the spec boundary.
- formula: addDays/addMonths CEL stdlib functions (UTC, dyn-typed, addMonths
  clamps to month end).
- spec/plugin-security: converge the RLS contract to the four expression
  forms the compiler implements (drop the over-promised subquery/LIKE/regex/
  ANY/ALL surface) and wire §7.3.1 dynamic membership via a pre-resolved
  ExecutionContext.rlsMembership bag; recognize "1 = 1" as always-true so
  RLS.allowAllPolicy grants instead of failing closed.
@vercel

vercel Bot commented Jun 18, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jun 18, 2026 3:41pm

Request Review

…s-7b232d

# Conflicts:
#	packages/spec/src/ui/view.test.ts
#	packages/spec/src/ui/view.zod.ts
@github-actions github-actions Bot added documentation Improvements or additions to documentation protocol:data tests tooling labels Jun 18, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 5 package(s): @objectstack/formula, @objectstack/objectql, @objectstack/plugin-security, @objectstack/runtime, @objectstack/spec.

98 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/cloud-artifact-api.mdx (via packages/runtime, packages/spec)
  • content/docs/concepts/cluster-semantics.mdx (via @objectstack/spec)
  • content/docs/concepts/core/services.mdx (via @objectstack/objectql)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/implementation-status.mdx (via @objectstack/objectql, @objectstack/plugin-security, @objectstack/runtime, @objectstack/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via @objectstack/objectql, packages/spec)
  • content/docs/concepts/north-star.mdx (via packages/runtime, packages/spec)
  • content/docs/concepts/packages.mdx (via @objectstack/formula, @objectstack/objectql, @objectstack/plugin-security, @objectstack/runtime, @objectstack/spec)
  • content/docs/concepts/setup-app.mdx (via @objectstack/spec)
  • content/docs/concepts/skills.mdx (via @objectstack/spec)
  • content/docs/concepts/webhook-delivery.mdx (via @objectstack/spec)
  • content/docs/getting-started/architecture.mdx (via @objectstack/spec)
  • content/docs/getting-started/cli.mdx (via @objectstack/plugin-security, @objectstack/spec)
  • content/docs/getting-started/core-concepts.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/guides/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/guides/ai-capabilities.mdx (via @objectstack/spec)
  • content/docs/guides/airtable-dashboard-analysis.mdx (via @objectstack/spec)
  • content/docs/guides/analytics-datasets.mdx (via @objectstack/spec)
  • content/docs/guides/api-reference.mdx (via @objectstack/runtime, @objectstack/spec)
  • content/docs/guides/authentication.mdx (via @objectstack/objectql, @objectstack/runtime)
  • content/docs/guides/business-logic.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/error-catalog.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/field-type-gallery.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/field-validation-rules.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/permissions-matrix.mdx (via packages/plugins/plugin-security, @objectstack/spec)
  • content/docs/guides/cheatsheets/protocol-diagram.mdx (via packages/spec)
  • content/docs/guides/cheatsheets/query-cheat-sheet.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/quick-reference.mdx (via @objectstack/spec)
  • content/docs/guides/client-sdk.mdx (via @objectstack/spec)
  • content/docs/guides/cloud-deployment.mdx (via @objectstack/runtime)
  • content/docs/guides/common-patterns.mdx (via @objectstack/spec)
  • content/docs/guides/contracts/auth-service.mdx (via packages/spec)
  • content/docs/guides/contracts/cache-service.mdx (via packages/spec)
  • content/docs/guides/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/guides/contracts/index.mdx (via @objectstack/spec)
  • content/docs/guides/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/guides/contracts/storage-service.mdx (via packages/spec)
  • content/docs/guides/data-modeling.mdx (via @objectstack/spec)
  • content/docs/guides/deployment-vercel.mdx (via @objectstack/objectql, @objectstack/runtime, @objectstack/spec)
  • content/docs/guides/driver-configuration.mdx (via @objectstack/runtime, @objectstack/spec)
  • content/docs/guides/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/guides/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/guides/formula.mdx (via @objectstack/formula, packages/objectql, @objectstack/spec)
  • content/docs/guides/hook-bodies.mdx (via @objectstack/runtime, packages/spec)
  • content/docs/guides/kernel-services.mdx (via @objectstack/objectql, @objectstack/spec)
  • content/docs/guides/metadata/dashboard.mdx (via @objectstack/plugin-security, @objectstack/spec)
  • content/docs/guides/metadata/field.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/flow.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/index.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/object.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/validation.mdx (via @objectstack/formula, @objectstack/spec)
  • content/docs/guides/metadata/workflow.mdx (via @objectstack/spec)
  • content/docs/guides/objectql-migration.mdx (via @objectstack/objectql)
  • content/docs/guides/packages.mdx (via @objectstack/formula, @objectstack/objectql, @objectstack/plugin-security, @objectstack/runtime, @objectstack/spec)
  • content/docs/guides/plugin-chatbot-integration.mdx (via @objectstack/runtime)
  • content/docs/guides/plugin-development.mdx (via @objectstack/spec)
  • content/docs/guides/plugins.mdx (via @objectstack/objectql, @objectstack/plugin-security, @objectstack/spec)
  • content/docs/guides/production-readiness.mdx (via @objectstack/runtime)
  • content/docs/guides/project-scoping.mdx (via @objectstack/spec)
  • content/docs/guides/public-forms.mdx (via @objectstack/spec)
  • content/docs/guides/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/guides/runtime-services/index.mdx (via packages/spec)
  • content/docs/guides/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/guides/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/guides/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/guides/security.mdx (via @objectstack/plugin-security, @objectstack/spec)
  • content/docs/guides/seed-data.mdx (via @objectstack/spec)
  • content/docs/guides/single-project-mode.mdx (via @objectstack/runtime)
  • content/docs/guides/skills.mdx (via @objectstack/spec)
  • content/docs/guides/standards.mdx (via @objectstack/spec)
  • content/docs/guides/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/http-protocol.mdx (via @objectstack/runtime)
  • content/docs/protocol/objectos/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/index.mdx (via @objectstack/objectql, @objectstack/runtime)
  • content/docs/protocol/objectos/lifecycle.mdx (via @objectstack/runtime, @objectstack/spec)
  • content/docs/protocol/objectos/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/runtime-capabilities.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via packages/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/objectql, @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via packages/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/formula, @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/objectql, @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@github-actions github-actions Bot added size/l and removed documentation Improvements or additions to documentation protocol:data tests tooling labels Jun 18, 2026
@os-zhuang
os-zhuang merged commit 1f88fd9 into main Jun 18, 2026
17 checks passed
@os-zhuang
os-zhuang deleted the claude/tender-torvalds-7b232d branch June 18, 2026 22:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants